iT邦幫忙

2023 iThome 鐵人賽

DAY 5
0

題目說明

給定一個數值陣列 nums,回傳此陣列數值組合後的最大值

解題思路

這題可以透過排序來解,排序的依據為兩個數值轉為字串組合後取大者,呈降冪排序
這題需注意陣列裡皆為 0 的狀況

  • Time Complexity: O(sort)-> O(nlogn)
  • Space Complexity: O(n)

程式碼

class Solution:
    def largestNumber(self, nums: List[int]) -> str:
        def compare(a, b):
            
            return -1 if a + b > b + a else 1
        
        for i, n in enumerate(nums):
            nums[i] = str(n)
            
        nums = sorted(nums, key=cmp_to_key(compare))
        return '0' if nums[0] == '0' else "".join(nums)

其他討論

  1. 物件的 default 排序

nums = ['1','24','25','12']

class LargerStrKey(str):
  def __lt__(x: str, y: str) -> bool:
    return x + y > y + x


sorted(nums, key=LargerStrKey)
# ['25','24','12','1']

  1. sorted 函式的用法需熟悉

如何排序
cmp

參考資料

  1. NeetCode(1990-01-01)。Largest Number - Leetcode 179 - Python。摘自 Youtube (2023-09-20)
  2. Walkccc(Unknown)。179. Largest Number。摘自 walkccc.me (2023-09-20)

上一篇
Day 4 - 5. Longest Palindromic Substring
下一篇
Day 6 - 215. Kth Largest Element in an Array
系列文
Leetcode 習慣養成之路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言